	.file	".\\test_sum.c"
	.text
	.def	__main;	.scl	2;	.type	32;	.endef
	.section	.text.startup,"x"
	.p2align 4
	.globl	main
	.def	main;	.scl	2;	.type	32;	.endef
	.seh_proc	main
main:
	subq	$40, %rsp
	.seh_stackalloc	40
	.seh_endprologue
	call	__main
	movdqa	.LC0(%rip), %xmm0
	xorl	%eax, %eax
	pxor	%xmm1, %xmm1
	movdqa	.LC1(%rip), %xmm3
	.p2align 4,,10
	.p2align 3
.L2:
	movdqa	%xmm0, %xmm2 ;复制 xmm0 到 xmm2(128位, 4个32位整数).
	addl	$1, %eax ;eax 加 1(32位).
	paddd	%xmm3, %xmm0 ;xmm0 和 xmm3 做 4 个 32 位整数并行加法.
	paddd	%xmm2, %xmm1 ;xmm1 和 xmm2 做并行加法.
	cmpl	$25000, %eax ; 比较 eax 和 25000(32位). ; l = long = 32 位
	jne	.L2 ; 不等则跳回循环.
    ; 把 xmm1 里的 4 个 32 位整数累加成一个 32 位整数, 最后 movd %xmm1, %eax 把结果放到 eax
	movdqa	%xmm1, %xmm0 ; SSE(Streaming SIMD Extensions) 指令;移动 128 位(16 Byte)数据到 SSE 寄存器
	psrldq	$8, %xmm0
	paddd	%xmm0, %xmm1
	movdqa	%xmm1, %xmm0
	psrldq	$4, %xmm0
	paddd	%xmm0, %xmm1
	movd	%xmm1, %eax ;  d = doubleword = 32 位
	addq	$40, %rsp
	ret
	.seh_endproc
	.section .rdata,"dr"
	.align 16
.LC0:
	.long	0
	.long	1
	.long	2
	.long	3
	.align 16
.LC1:
	.long	4
	.long	4
	.long	4
	.long	4
	.ident	"GCC: (GNU) 13.3.0"
